Docker 安装与核心概念
学习容器化技术的最佳入门方式就是安装 Docker。Docker 提供了桌面端应用程序(Docker Desktop),可以通过图形化方式创建和管理容器,同时还集成了 Kubernetes 和 Docker Swarm 等实验特性,方便后续探索集群方案。
学会 Docker 之后的好处:
- 环境一致性 -- 在镜像中固化了基础环境,一处编写,处处运行
- 逻辑隔离 -- 提供与虚拟机类似的文件系统、网络层面的隔离
- 快速部署 -- 生产、测试环境均可使用 Docker 驱动应用部署
各平台安装要求
Windows
| 要求 | 说明 |
|---|---|
| 系统版本 | Windows 10/11 家庭版、专业版、企业版、教育版 |
| CPU | 64 位处理器 |
| 内存 | 4GB 以上 |
| 虚拟化 | BIOS 中开启 Virtualization(虚拟化)支持 |
| WSL 2 | 推荐启用 WSL 2 后端 |
Windows 11 教育版需 21H2 及以上版本。如果 BIOS 不支持虚拟化,可能需要升级 BIOS 固件。
macOS
| 芯片类型 | 要求 |
|---|---|
| Apple Silicon (M1/M2/M3/M4) | Docker Desktop 4.3 及以上版本直接安装 |
| Intel 芯片 | macOS 11 及以上,4GB RAM,VirtualBox >= 4.3.30 |
Linux
Ubuntu、Debian、Fedora 等主流发行版均支持。要求:
- 64 位 CPU
- KVM 虚拟化支持(仅 Docker Desktop 需要)
如果不使用图形化界面,直接安装命令行版本即可,没有额外要求。
Linux 安装 Docker(实操)
推荐使用 Docker 官方提供的便捷脚本安装。
方法一:官方脚本安装
# 下载安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 执行安装
sudo sh get-docker.sh
bash
如果无法访问 get.docker.com,可以从 GitHub 的 docker/install 仓库下载 install.sh 脚本:
# 从 GitHub 下载脚本
# 访问 https://github.com/docker/docker-install 页面的 Raw 链接
# 保存为 get-docker.sh 后上传到服务器
# 添加执行权限
chmod +x get-docker.sh
# 执行安装
sudo sh get-docker.sh
bash
验证安装
# 查看 Docker 版本
docker --version
# 输出示例: Docker version 24.0.2, build cb74dfc
# 设置开机自启动
sudo systemctl enable docker
# 查看运行状态
sudo systemctl status docker
# 或使用 service 命令(部分系统)
sudo service docker status
bash
当看到 running 状态时,说明 Docker 已正常工作。
运行验证
# 运行 hello-world 镜像验证安装
docker run hello-world
bash
Docker 核心概念
Docker 的核心概念可以用三个关键词概括:镜像 (Image)、容器 (Container)、仓库 (Registry)。
核心概念关系图
Registry (仓库)
┌─────────────────────────────┐
│ Docker Hub │
search ──> │ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │mysql│ │nginx│ │node │ │
│ └──┬──┘ └─────┘ └─────┘ │
└─────┼───────────────────────┘
│ pull (下载)
v
Local Host ┌──────────────┐
│ Images │ <-- docker images (查看)
│ (本地镜像) │ <-- docker build (构建)
│ │ <-- docker pull (拉取)
└──────┬───────┘
│ docker run (运行)
v
┌──────────────┐
│ Container │ <-- docker ps (查看)
│ (容器实例) │ <-- docker start/stop/rm
│ │ (生命周期管理)
└──────────────┘
│ docker commit (提交)
v
┌──────────────┐
│ Images │ <-- docker push (推送到仓库)
│ (新镜像) │ 需要先 docker login
└──────────────┘
text
1. 镜像 (Image)
镜像是 Docker 的核心构建块,它是一个分层的只读文件系统。每个镜像由多层组成,每层对应 Dockerfile 中的一条指令。
镜像内部包含:
- 基础环境 -- 操作系统基础文件(如 Ubuntu、Alpine)
- 依赖库 -- 应用运行所需的库和工具
- 应用代码 -- 业务代码和配置文件
- 运行脚本 -- 启动命令和初始化脚本
# 查看本地镜像
docker images
# 从 Docker Hub 搜索镜像
docker search nginx
# 拉取镜像
docker pull mysql:8.0
# 构建镜像(基于 Dockerfile)
docker build -t my-app:1.0 .
bash
2. 容器 (Container)
容器是运行中的镜像实例。当执行 docker run 时,Docker 在基础镜像之上创建一个可写层(类似快照),所有对容器的修改都保存在这个可写层中。
# 运行容器
docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看容器日志
docker logs my-mysql
bash
3. 仓库 (Registry)
仓库是存放和分发镜像的服务。默认仓库是 Docker Hub (hub.docker.com)。
# 登录 Docker Hub
docker login
# 推送镜像到仓库
docker push my-username/my-app:1.0
# 登出
docker logout
bash
国内访问 Docker Hub 较慢时,可以使用阿里云、DaoCloud 等加速服务。
Docker 常用命令速查
基础信息命令
| 命令 | 说明 |
|---|---|
docker --version | 查看 Docker 版本 |
docker info | 查看 Docker 系统信息 |
docker help | 查看帮助信息 |
镜像管理
| 命令 | 说明 |
|---|---|
docker images | 列出本地镜像 |
docker pull <image>:<tag> | 拉取镜像 |
docker push <image>:<tag> | 推送镜像 |
docker build -t <name> . | 基于 Dockerfile 构建镜像 |
docker search <keyword> | 搜索 Docker Hub 镜像 |
docker rmi <image> | 删除镜像 |
容器生命周期管理
| 命令 | 说明 |
|---|---|
docker run | 创建并运行容器 |
docker start <container> | 启动已停止的容器 |
docker stop <container> | 停止运行中的容器 |
docker restart <container> | 重启容器 |
docker rm <container> | 删除容器 |
docker ps | 查看运行中的容器 |
docker ps -a | 查看所有容器 |
容器交互命令
| 命令 | 说明 |
|---|---|
docker exec -it <container> bash | 进入容器内部 |
docker logs <container> | 查看容器日志 |
docker inspect <container> | 查看容器详细信息 |
docker run 命令详解
docker run 是最常用的命令,各参数含义:
docker run \
-d \ # 后台运行(detached mode)
--name my-mysql \ # 容器命名
-p 33060:3306 \ # 端口映射:宿主机端口:容器端口
-e MYSQL_ROOT_PASSWORD=123456 \ # 环境变量
-v /data/mysql:/var/lib/mysql \ # 数据卷挂载:宿主机路径:容器路径
--restart=always \ # 重启策略
mysql:8.0 # 镜像名称:标签
bash
端口映射规则
-p 参数格式为 宿主机端口:容器端口:
- 冒号前面是宿主机(外部)的端口
- 冒号后面是容器(内部)的服务端口
- 需要在防火墙中放行的是宿主机端口
重启策略
| 策略 | 说明 |
|---|---|
no | 不自动重启(默认) |
always | 总是重启,包括 Docker 守护进程启动时 |
on-failure | 仅当容器异常退出时重启 |
unless-stopped | 类似 always,但手动停止后不会重启 |
Docker 镜像的分层机制
Docker 镜像采用分层存储(Layer)设计。Dockerfile 中的每条指令都会产生一个新的只读层,所有层叠加在一起构成完整镜像:
+-------------------+
| 应用代码层 | <-- COPY / ADD
+-------------------+
| npm install 层 | <-- RUN npm install
+-------------------+
| 基础环境层 | <-- FROM node:18-alpine
+-------------------+
text
运行容器时,Docker 在镜像顶部添加一个可写层(Container Layer)。所有对容器的修改都写入该层。如果需要将这些修改固化为新镜像,使用 docker commit。
小结
| 知识点 | 要点 |
|---|---|
| 安装方式 | Docker Desktop(macOS/Windows)或脚本安装(Linux) |
| 核心概念 | 镜像 (Image) = 分层文件系统;容器 (Container) = 运行中的镜像实例;仓库 (Registry) = 镜像存储与分发 |
| 常用命令 | run、pull、push、build、ps、images、exec、logs |
| 生命周期 | start -> running -> stop -> removed |
| 端口映射 | -p 宿主机端口:容器端口,防火墙放行宿主机端口 |
| 分层存储 | Dockerfile 每条指令产生一层,容器在镜像顶部添加可写层 |
↑